/*
  需求：防止按钮在短时间内被多次点击，使用防抖函数限制规定时间内只能点击一次。

  思路：
    1、第一次点击，立即调用方法并禁用按钮，等延迟结束再次激活按钮
    2、将需要触发的方法绑定在指令上
  
  使用：给 Dom 加上 v-debounce 及回调函数即可
  <button v-debounce="debounceClick">防抖提交</button>
*/
export default {
  inserted: (el, binding) => {
    const { arg, modifiers } = binding;
    let timer = null;
    let flag = null;
    const time = modifiers.short ? 300 : 1000;
    el.addEventListener(arg || 'click', () => {
      if (timer) {
        clearTimeout(timer);
        flag = null;
      }
      if (!flag) {
        flag = true;
        timer = setTimeout(() => {
          typeof binding.value === 'function' && binding.value();
          flag = null;
        }, time);
      }
    });
  }
};
